其他
文件的压缩与解压库-zipfile、tarfile
标准库tarfile、zipfile,可以用来处理压缩文件,如gzip、bz2和lzma等。两者很类似,基本上学会一个库,另一个库也就会了。
一、zipfile库
1.1 压缩单个文件
import zipfile
import os
#将 “三体.txt” 压缩到 “三体.zip”中
with zipfile.ZipFile('三体.zip', 'w') as z:
#请注意这里写的是当前文件夹下的文件名
z.write('三体.txt')
z.write('test.txt')
#请注意这里写的是当前文件夹下的文件名
如果z.write('/A/三体.txt')
那么在“三体.zip”中会生成一个User文件夹。
如果z.write('/A/B/C/三体.txt')
打开“三体.zip”首先看到A,点进A发现B,打开B看到C,最后才看到"三体.txt"。像剥洋葱,玩俄罗斯套娃,
1.2 解压文件
with zipfile.ZipFile('三体.zip', 'r') as z:
# 查看压缩包中的文件列表
print(z.namelist())
# 查看压缩包中的第一个文件,相当于open(file).read()
#print(zip.read(z.namelist()[0]))
# 解压 “三体.zip”中的 “三体.txt”文件
z.extract('三体.txt')
# 解压全部
z.extractall()
# 解压,在当前文件夹下会出现一个名为"三体"的文件夹
z.extractall('三体')
1.3 压缩某个目录下所有文件
先了解下os.walk()
os.walk() 方法用于通过在目录树中游走输出目录中的文件名。
返回的是三元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】组成的生成器。
import os
# top:随机游走的顶级目录参数。"."代表根目录
for root, dirs, files in os.walk(top = "."):
for name in files:
print(os.path.join(root, name))
#for name in dirs:
#print(os.path.join(root, name))
./.DS_Store
./tarfile学习.md
./tarfile学习.py
./test.txt
./三体.txt
./aa/.DS_Store
./aa/a.txt
./aa/b.txt
import os
for root, dirs, files in os.walk(top = "."):
#for name in files:
#print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
./aa
有了上面的知识,我们就可以使用zipfile压缩某个目录下所有文件
def compress_file(zipfilename, dirname):
"""
:param zipfilename: 压缩包名字
:param dirname: 要打包的目录
:return:
"""
#如果dirname是文件名
if os.path.isfile(dirname):
with zipfile.ZipFile(zipfilename, 'w') as z:
z.write(dirname)
#如果dirname是文件夹
else:
with zipfile.ZipFile(zipfilename, 'w') as z:
for root, dirs, files in os.walk(dirname):
for single_file in files:
if single_file != zipfilename:
filepath = os.path.join(root, single_file)
#将dirname文件夹中的所有文件都压缩
z.write(filepath)
# 执行函数
compress_file('a.zip', '.')
1.4添加文件到已有的zip包中
跟上面的函数类似,只将函数内写入w改成追加a操作。
def addfile(zipfilename, dirname):
#如果dirname是文件名
if os.path.isfile(dirname):
#a:追加写入模式
with zipfile.ZipFile(zipfilename, 'a') as z:
z.write(dirname)
#如果dirname是文件夹
else:
with zipfile.ZipFile(zipfilename, 'a') as z:
for root, dirs, files in os.walk(dirname):
for single_file in files:
if single_file != zipfilename:
filepath = os.path.join(root, single_file)
z.write(filepath)
addfile('三体.zip', '黑暗森林.txt')
1.5 查看压缩包中的文件
def viewfile(zipfilename):
#r:读取模式
filelist = []
with zipfile.ZipFile(zipfilename, 'r') as z:
filelist+=z.namelist()
return filelist
print(viewfile('三体.zip'))
['tarfile学习.md', 'zipfile学习.md', 'test.txt', '三体.txt', 'aa/a.txt', 'aa/b.txt']
二、TarFile
2.1 压缩文件
import tarfile
import os
with tarfile.open('三体.tar', 'w') as tar:
tar.add('三体.txt')
2.2解压文件
with tarfile.open('a.tar', 'r') as tar:
# 查看压缩包内含有的文件
print(tar.getmembers())
# 可选择解压某个文件
tar.extract('三体.txt')
# 解压全部
tar.extractall()
#将压缩包内的文件解压到”三体2“文件夹中
tar.extractall('三体2')
[<TarInfo '三体.txt' at 0x1023bf048>]
2.3 压缩某个目录下所有文件
基本上同zipfile
def compress_file(tarfilename, dirname):
if os.path.isfile(dirname):
with tarfile.open(tarfilename, 'w') as tar:
tar.add(dirname)
else:
with tarfile.open(tarfilename, 'w') as tar:
for root, dirs, files in os.walk(dirname):
for single_file in files:
if single_file != tarfilename:
filepath = os.path.join(root, single_file)
tar.add(filepath)
compress_file('三体.tar', 'test.txt')compress_file('三体.tar', '.')
2.4 添加文件到已有的tar包中
def addfile(tarfilename, dirname):
if os.path.isfile(dirname):
with tarfile.open(tarfilename, 'a') as tar:
tar.add(dirname)
else:
with tarfile.open(tarfilename, 'a') as tar:
for root, dirs, files in os.walk(dirname):
for single_file in files:
#if single_file != tarfilename:
filepath = os.path.join(root, single_file)
tar.add(filepath)
addfile('三体.tar', '黑暗森林.txt')
历史文章:
数据采集
【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”
【视频】快来get新技能--抓包+cookie,爬微博不再是梦